<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //反转数组升级版
        function shuz(arr) {
            if (arr instanceof Array) {//判断用户输入的是否是数组
                var arrs = []
                for (var i = arr.length - 1; i >= 0; i--) {
                    arrs[arrs.length] = arr[i];
                }
            } else {
                return 'err:xxxx'
            }
            return arrs;
        }
        var dd = shuz(1, 2, 3, 4);
        console.log(dd);//err:xxxx
        var nb = shuz([1, 2, 3, 4, 5, 6, 7]);
        console.log(nb);



        //反转数组升级版2
        function shuz(arr) {
            if (Array.isArray(arr)) {//判断用户输入的是否是数组
                var arrs = []
                for (var i = arr.length - 1; i >= 0; i--) {
                    arrs[arrs.length] = arr[i];
                }
            } else {
                return 'err:xxxx'
            }
            return arrs;
        }
        var dd = shuz(1, 2, 3, 4);
        console.log(dd);//err:xxxx
        var nb = shuz([1, 2, 3, 4, 5, 6, 7]);
        console.log(nb);






        console.log('---------判断数组Array.isArray()----------');

        // Array.isArray()方法判断是否是数组
        var a = [1, 23, 4,];
        var b = (23, 45, 6);
        console.log(Array.isArray(a)); //true
        console.log(Array.isArray(b)); //false








        console.log('--------------------添加------------------');
        console.log('-------------push()后面---------');

        //添加元素的方法
        //  push()在数组末尾添加一个或多个元素，并返回数组新的 length
        arr = [1, 2, 3, 4]
        arr.push(5, '胡歌')//在数组末尾添加一个或多个元素，并返回数组新的 length
        console.log(arr);

        console.log('----------unshift()前面----------');

        //   unshift() 方法将一个或多个元素添加到数组的开头，并返回该数组的新长度。
        arr1 = [1, 2, 3, 4]
        arr1.unshift('彭于晏', 0)
        console.log(arr1);







        console.log('-----------------删除-------------------');
        console.log('-----------pop()后面------------');

        //删除元素方法
        //   pop() 方法从数组中删除最后一个元素，并返回该元素的值，一次只能删除一个。此方法会更改数组的长度。如果你在一个空数组上调用 pop()，它将返回 undefined。
        arr2 = [1, 2, 3, 4, 0]
        // arr2.pop();  //没有输出删除最后一个元素的值
        console.log(arr2.pop());//在浏览器里显示删除的值
        console.log(arr2);

        console.log('----------shift()前面-----------');

        //   shift() 方法从数组中删除第一个元素，并返回该元素的值。此方法更改数组的长度。
        arr3 = [0, 1, 2, 3, 4]
        // arr3.shift();  //没有输出删除第一个元素的值
        console.log(arr3.shift());//在浏览器里显示删除的值
        console.log(arr3);




        console.log('--------------数组排序------------');

        console.log('---------reverse() --------');
        //数组排序
        //   reverse() 方法将数组中元素的位置颠倒，并返回该数组。数组的第一个元素会变成最后一个，数组的最后一个元素变成第一个。该方法会改变原数组。
        var arr4 = [1, 2, 3, 4, 5, 6, 7]
        arr4.reverse();//颠倒数组
        console.log(arr4);


        console.log('---------sort()--------');
        //  sort() 方法用原地算法对数组的元素进行排序，并返回数组。默认排序顺序是在将元素转换为字符串，
        //然后比较它们的 UTF-16 代码单元值序列时构建的   由于它取决于具体实现，因此无法保证排序的时间和空间复杂性。
        arr5 = [2, 3, 7, 4, 6, 5, 1, 34, 23, 12]
        // arr5.sort();//不能排十位数的
        arr5.sort(function (a, b) {//添加函数就可以排十位数了
            return a - b;
        });
        console.log(arr5);



        console.log('---------indexOf()-------');
        // indexOf() 方法返回在数组中可以找到给定元素的第一个索引，如果不存在，则返回 -1
        arr6 = [1, 2, '胡歌', 3, 4, 5, 6, 2]
        console.log(arr6.indexOf(2));
        console.log(arr6.indexOf(2, 2));//第二个参数是从索引为二的位置开始往后找，没找到就返回-1
        console.log(arr6.indexOf('胡歌')); 


        console.log('---------toString（），join()------');
        // join() 方法将一个数组（或一个类数组对象）的所有元素连接成一个字符串并返回这个字符串，
        // 用逗号或指定的分隔符字符串分隔。如果数组只有一个元素，那么将返回该元素而不使用分隔符。
        var arr7 = [1, 2, 3, 4, 5, 6, 7]
        console.log(arr7.join('*'));//join()括号里面是链接符 输出样式1*2*3*4*5*6*7


        // toString() 方法返回一个字符串，表示指定的数组及其元素。
        console.log(arr7);
        console.log(arr7.toString());//1,2,3,4,5,6,7

        console.log('------------------slice()-------------------------');
        // slice() 方法返回一个新的数组对象，语法：slice(start, end) 
        // 这一对象是一个由 begin 和 end 决定的原数组的浅拷贝（包括 begin，不包括end）。原始数组不会被改变。
        var index2 = ['胡歌', '彭于晏', '胡歌', '胡歌', '彭于晏', '赵玉真', '赵玉真']
        //第一个参数为开始，第二个参数为结束
        console.log(index2.slice(2, 4));//['胡歌', '胡歌'] 表示凑索引2开始倒索引4（不包含索引为4的元素）





        //  splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组，并以数组形式返回被修改的内容。此方法会改变原数组。
        //第一个参数是从2索引开始(没有删除参数就不包含索引为变身的元素)，第二个参数是从索引2开始删除4个元素，第三参数是添加元素从第一个参数后面添加
        index2.splice(2, 0, 'sb')
        console.log(index2)//['胡歌', '彭于晏', 'sb', '赵玉真']
        var index1 = ['胡歌', '彭于晏', '胡歌', '胡歌', '彭于晏', '赵玉真', '赵玉真']
        //从索引为2的元素开始删除后面四个元素添加‘小小怪’，’大大怪‘两个元素
        index1.splice(2, 4, '小小怪', '大大怪')
        console.log(index1);//['胡歌', '彭于晏', '小小怪', '大大怪', '赵玉真']
        index1.splice(3, 1, '龙')
        console.log(index1);


        console.log('------------------concat()-------------------------');
        //  concat() 方法用于合并两个或多个数组。此方法不会更改现有数组，而是返回一个新数组。
        var index2 = ['胡歌', '彭于晏', '胡歌', '胡歌', '彭于晏', '赵玉真', '赵玉真']
        var int1 = index2.slice(0, 3)//['胡歌', '彭于晏', '胡歌', '胡歌']
        var int2 = index2.splice(2, 4)//['胡歌', '彭于晏', '赵玉真']
        var int3 = int1.concat(int2)//['胡歌', '彭于晏', '胡歌', '胡歌']+['胡歌', '彭于晏', '赵玉真']
        console.log(int3);//['胡歌', '彭于晏', '胡歌', '胡歌', '胡歌', '彭于晏', '赵玉真']
       
    </script>
</body>

</html>